using System.Collections.Generic;
using Sinacor.Servico.Bovespa.Contabil.Service.ServiceContract;
using Sinacor.Infra.Service.Security.Services;

namespace Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation
{
    [SinacorServiceBehavior]
    public class TipoDespesa : ITipoDespesa
    {

        public void AlterarTipoDespesa(DataContract.Request.TipoDespesaRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            _businessLogic.AlterarTipoDespesa(_toBusinessEntity.ToTipoDespesa(request));
        }

        public void AlterarTiposDespesas(List<DataContract.Request.TipoDespesaRequest> requestList)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            _businessLogic.AlterarTiposDespesas(_toBusinessEntity.ToTipoDespesa(requestList));
        }

        public List<DataContract.Response.TipoDespesaResponse> ConsultarTiposDespesas(DataContract.Request.FiltroTipoDespesaRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            Translator.BusinessEntityToDataContract.TipoDespesa _toDataContract = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.BusinessEntityToDataContract.TipoDespesa();
            return _toDataContract.ToTipoDespesaResponse(_businessLogic.ConsultarTiposDespesas(_toBusinessEntity.ToFiltroTipoDespesa(request)));
        }

        public List<DataContract.Response.TipoDespesaResponse> ConsultarTiposDespesasPeriodo(DataContract.Request.FiltroTipoDespesaPeriodoRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            Translator.BusinessEntityToDataContract.TipoDespesa _toDataContract = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.BusinessEntityToDataContract.TipoDespesa();
            return _toDataContract.ToTipoDespesaResponse(_businessLogic.ConsultarTiposDespesasPeriodo(_toBusinessEntity.ToFiltroTipoDespesaPeriodo(request)));
        }

        public void ExcluirTipoDespesa(DataContract.Request.FiltroTipoDespesaChaveRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            _businessLogic.ExcluirTipoDespesa(_toBusinessEntity.ToFiltroTipoDespesaChave(request));
        }

        public void ExcluirTiposDespesas(List<DataContract.Request.FiltroTipoDespesaChaveRequest> requestList)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            _businessLogic.ExcluirTiposDespesas(_toBusinessEntity.ToFiltroTipoDespesaChave(requestList));

        }

        public void ExecutarTransacoesTipoDespesa(List<DataContract.Request.FiltroTipoDespesaChaveRequest> exclusaoList, List<DataContract.Request.TipoDespesaRequest> inclusaoList, List<DataContract.Request.TipoDespesaRequest> alteracaoList)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();

            _businessLogic.ExcluirTiposDespesas(_toBusinessEntity.ToFiltroTipoDespesaChave(exclusaoList));
            _businessLogic.IncluirTiposDespesas(_toBusinessEntity.ToTipoDespesa(inclusaoList));
            _businessLogic.AlterarTiposDespesas(_toBusinessEntity.ToTipoDespesa(alteracaoList));
        }

        public void IncluirTipoDespesa(DataContract.Request.TipoDespesaRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();

            _businessLogic.IncluirTipoDespesa(_toBusinessEntity.ToTipoDespesa(request));
        }

        public void IncluirTiposDespesas(List<DataContract.Request.TipoDespesaRequest> requestList)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            _businessLogic.IncluirTiposDespesas(_toBusinessEntity.ToTipoDespesa(requestList));
        }

        public DataContract.Response.TipoDespesaResponse ObterTipoDespesa(DataContract.Request.FiltroTipoDespesaChaveRequest request)
        {
            BusinessLogic.TipoDespesa _businessLogic = new Sinacor.Servico.Bovespa.Contabil.BusinessLogic.TipoDespesa();
            Translator.DataContractToBusinessEntity.TipoDespesa _toBusinessEntity = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.DataContractToBusinessEntity.TipoDespesa();
            Translator.BusinessEntityToDataContract.TipoDespesa _toDataContract = new Sinacor.Servico.Bovespa.Contabil.Service.ServiceImplementation.Translator.BusinessEntityToDataContract.TipoDespesa();
            return _toDataContract.ToTipoDespesaResponse(_businessLogic.ObterTipoDespesa(_toBusinessEntity.ToFiltroTipoDespesaChave(request)));
        }
    }
}